package cn.sprouting.tool;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.RandomUtil;
import cn.sprouting.model.Area;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 药物相关
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2021/11/4 14:17
 */
public class RandomMedicineTool {

    /**
     * 常用医院名称
     */
    private static ArrayList<String> LIST_NUM = CollUtil.newArrayList("武警医院", "航天医院", "第二人民医院", "第一人民医院", "人民医院", "附属第三医院", "附属第二医院", "妇幼保健院", "第二医院", "第三医院", "中医院");


    /**
     * 随机出医院名称
     * @param num 随机数量
     * @param provinceCodeList 是否指定生成指定省的地区信息，注意，省市代码长度，可以为null
     * @param cityCodeList 是否指定生成指定市区的地区信息，注意，省市代码长度，可以为null
     * @param countyCodeList 是否指定生成指定县的地区信息，注意，省市代码长度，可以为null
     * @return
     */
    public static List<String> getHospitalName(Integer num, List<String> provinceCodeList, List<String> cityCodeList, List<String> countyCodeList){
        if (num == null || num < 1){
            num = 1;
        }
        List<Area> areaList = RandomAreaTool.getArea(num, provinceCodeList, cityCodeList, countyCodeList);
        if (areaList == null || areaList.size() == 0){
            return null;
        }

        List<String> countyList = areaList.stream().map(Area::getCity).collect(Collectors.toList());
        List<String> saveList = new ArrayList<>();
        for (String county : countyList){
            saveList.add(county + RandomUtil.randomEle(LIST_NUM));
        }
        return saveList;
    }


    /**
     * 获取疾病名称
     * @param num 获取数量 注意，数量有限，不会超过最大值
     * @return
     */
    public static List<String> getDisease(Integer num){
        String diseaseTxt = ResourceUtil.readUtf8Str("disease.txt");
        String[] array = diseaseTxt.split("\r\n");
        List<String> list = Arrays.asList(array);

        if (num == null || num < 1){
            num = 1;
        }
        if (num > list.size()){
            num = list.size();
        }

        return RandomUtil.randomEleList(list, num);
    }

    /**
     * 获取西药药物名称
     * @return
     */
    public static String getWesternMedicineName(){
        return getWesternMedicineName(1).get(0);
    }

    /**
     * 获取西药药物名称
     * @param num 获取数量 注意，药物真实，故而数量有限，不会超过最大值
     * @return
     */
    public static List<String> getWesternMedicineName(Integer num){
        String xiyaoTxt = ResourceUtil.readUtf8Str("xiyao.txt");
        String[] array = xiyaoTxt.split("\r\n");
        List<String> list = Arrays.asList(array);

        if (num == null || num < 1){
            num = 1;
        }
        if (num > list.size()){
            num = list.size();
        }

        return RandomUtil.randomEleList(list, num);
    }

    /**
     * 随机获取中药药物名称
     * @return
     */
    public static String getChineseMedicineName(){
        return getChineseMedicineName(1).get(0);
    }

    /**
     * 随机获取中药药物名称
     * @param num 生成数量，注意，药物真实，故而数量有限，不会超过最大值
     * @return
     */
    public static List<String> getChineseMedicineName(Integer num){
        String fundTxt = ResourceUtil.readUtf8Str("chineseMedicine.txt");
        String[] array = fundTxt.split("-");
        List<String> list = Arrays.asList(array);

        if (num == null || num < 1){
            num = 1;
        }
        if (num > list.size()){
            num = list.size();
        }

        return RandomUtil.randomEleList(list, num);
    }


}
